package com.ruoyi.project.drug.redis;

import org.springframework.data.redis.core.RedisTemplate;

import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * 访问Redis的数据访问接口
 * 提供增删改查能力。
 * 所有的value都使用字符串类型。
 * key都是字符串类型。
 */
public interface RedisDao {
    /**
     * 保存键值对到Redis
     * @param key
     * @param value
     */
    void set(String key, Object value);

    /**
     * 保存键值对到Redis，同时设置有效时长
     * @param key
     * @param value
     * @param expire 数字时间
     * @param unit  单位，如秒，分钟等。
     */
    void set(String key, Object value, Long expire, TimeUnit unit);

    /**
     * 根据key从Redis中查询value。
     * @param key
     * @param <T>
     * @return
     */
    <T> T get(String key);

    /**
     * 删除Redis中的键值对。
     * @param key
     */
    void del(String key);

    /**
     * 根据部分内容，查询相关的所有key的集合。
     * @param pattern key的部分内容。
     * @param <T>
     * @return
     */
    <T> Set<T> keys(String pattern);

    /**
     * 设置已有键值对的有效时长
     * @param key
     * @param expire 时间
     * @param unit 时间单位
     */
    void expire(String key, Long expire, TimeUnit unit);

    /**
     * 查询key的剩余有效时长。
     * @param key
     * @return 剩余有效时长，单位是 秒。
     */
    long ttl(String key);

    /**
     * 删除键值对有效时长
     * @param key
     */
    void persist(String key);
}
